package dto

import (
	"go-admin/app/admin/models"
	"go-admin/common/dto"
	common "go-admin/common/models"
)

// SysMemberTypeGetPageReq 列表或者搜索使用结构体
type SysMemberTypeGetPageReq struct {
	dto.Pagination `search:"-"`
	ParentId       int    `form:"parentId" search:"type:exact;column:parent_id;table:sys_member_type" comment:"上级会员类型"` //上级会员类型
	TypeName       string `form:"typeName" search:"type:exact;column:type_name;table:sys_member_type" comment:"会员类型名称"` //会员类型名称
	Sort           int    `form:"sort" search:"type:exact;column:sort;table:sys_member_type" comment:"排序"`              //排序
	Status         string `form:"status" search:"type:exact;column:status;table:sys_member_type" comment:"状态"`          //状态
}

func (m *SysMemberTypeGetPageReq) GetNeedSearch() interface{} {
	return *m
}

type SysMemberTypeInsertReq struct {
	Id       int    `uri:"id" comment:"编码"`                          // 会员类型编码
	ParentId int    `json:"parentId" comment:"上级会员类型" vd:"?"`        //上级会员类型
	TypeName string `json:"typeName" comment:"会员类型名称" vd:"len($)>0"` //会员类型名称
	Sort     int    `json:"sort" comment:"排序" vd:"?"`                //排序
	Status   int    `json:"status" comment:"状态" vd:"$>0"`            //状态
	common.ControlBy
}

func (s *SysMemberTypeInsertReq) Generate(model *models.SysMemberType) {
	if s.Id != 0 {
		model.Id = s.Id
	}
	model.TypeName = s.TypeName
	model.ParentId = s.ParentId
	model.Sort = s.Sort
	model.Status = s.Status
}

// GetId 获取数据对应的ID
func (s *SysMemberTypeInsertReq) GetId() interface{} {
	return s.Id
}

type SysMemberTypeUpdateReq struct {
	Id       int    `uri:"id" comment:"编码"`                         // 会员类型编码
	ParentId int    `json:"parentId" comment:"上级部门" vd:"?"`         //上级会员类型
	TypeName string `json:"typeName"  comment:"部门名称" vd:"len($)>0"` //会员类型名称
	Sort     int    `json:"sort" comment:"排序" vd:"?"`               //排序
	Status   int    `json:"status" comment:"状态" vd:"$>0"`           //状态
	common.ControlBy
}

// Generate 结构体数据转化 从 SysMemberTypeControl 至 SysMemberType 对应的模型
func (s *SysMemberTypeUpdateReq) Generate(model *models.SysMemberType) {
	if s.Id != 0 {
		model.Id = s.Id
	}
	model.TypeName = s.TypeName
	model.ParentId = s.ParentId
	model.Sort = s.Sort
	model.Status = s.Status
}

// GetId 获取数据对应的ID
func (s *SysMemberTypeUpdateReq) GetId() interface{} {
	return s.Id
}

type SysMemberTypeGetReq struct {
	Id int `uri:"id"`
}

func (s *SysMemberTypeGetReq) GetId() interface{} {
	return s.Id
}

type SysMemberTypeDeleteReq struct {
	Ids []int `json:"ids"`
}

func (s *SysMemberTypeDeleteReq) GetId() interface{} {
	return s.Ids
}

type TypeLabel struct {
	Id       int         `gorm:"-" json:"id"`
	Label    string      `gorm:"-" json:"label"`
	Children []TypeLabel `gorm:"-" json:"children"`
}
